package cn.iocoder.yudao.module.system.util;

import com.aliyun.teaopenapi.models.Config;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.SendSmsRequest;
import com.aliyun.dysmsapi20170525.models.SendSmsResponse;
import static com.aliyun.teautil.Common.toJSONString;

/**
 * @Description: 阿里云短信平台工具类
 * @Author: meiwanli
 * @Date: 2025-10-11 11:30
 */
public class MsgUtil {

    public static String SIGN_NAME="湖北省交通科学研究所";
    public static String TEMPLATE_ID="SMS_496740206";

    public static Client createClient() throws Exception {
        Config config = new Config()
                // 配置 AccessKey ID，请确保代码运行环境配置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
                .setAccessKeyId("LTAI5tCEUmSZr6zEYtC2tybx")
                // 配置 AccessKey Secret，请确保代码运行环境配置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
                .setAccessKeySecret("MJrZsehVWS96lLIWAmhDbHZ25oiPZm");

        // 配置 Endpoint。中国站使用dysmsapi.aliyuncs.com
        config.endpoint = "dysmsapi.aliyuncs.com";

        return new Client(config);
    }

    /**
     *
     * @param signName 短信签名
     * @param receiver 接收短信的手机号码，多个号码间有逗号分割，例如 "18971499913,18971499914"
     * @param templateId 模板id,需要用户自己申请获取
     * @param templateParas 待发送的短信的参数内容 例如:"{\"version\":\"20250425001\",\"total_count\":\"473\",\"download_count\":\"473\",\"unzip_status\":\"473\",\"store_status\":\"473\"}"
     * @return 返回短信发送的返回值内容
     * @throws Exception
     */
    public static String SendMsg(String signName,String receiver,String templateId, String templateParas) throws Exception {
        // 初始化请求客户端
        Client client = MsgUtil.createClient();

        // 构造API请求对象，请替换请求参数值
        SendSmsRequest sendSmsRequest = new SendSmsRequest()
                .setPhoneNumbers(receiver)
                .setSignName(signName)
                .setTemplateCode(templateId)
                .setTemplateParam(templateParas);
        // TemplateParam为序列化后的JSON字符串。

        // 获取响应对象
        SendSmsResponse sendSmsResponse = client.sendSms(sendSmsRequest);

        // 响应包含服务端响应的 body 和 headers
        System.out.println(toJSONString(sendSmsResponse));
        return toJSONString(sendSmsResponse);
    }

    /**
     * 测试样例
     *
     * 模板内容：尊敬的${userName}，您好！有一份新的${dataServiceName}申请，申请标题：${applicationTitle}正等待您的审批。申请人：${applicant}，申请时间：${aapplicationTime}。请及时到${platformName}处理，以确保业务流程顺利推进。如有疑问，可联系${contact}，联系方式${contactInformation}。
     */
    public static void main(String[] args) throws Exception {
        // 第三个测试用例 - 紧急审批场景
        SendMsg(MsgUtil.SIGN_NAME, "17671290960", TEMPLATE_ID,
                "{\n" +
                        "  \"userName\": \"刘总监\",\n" +
                        "  \"dataServiceName\": \"实时数据接入\",\n" +
                        "  \"applicationTitle\": \"武汉绕城高速实时监控数据接入申请\",\n" +
                        "  \"applicant\": \"陈技术员\",\n" +
                        "  \"aapplicationTime\": \"2025-10-11 16:45:00\",\n" +
                        "  \"platformName\": \"智慧交通指挥平台\",\n" +
                        "  \"contact\": \"技术支持热线\",\n" +
                        "  \"contactInformation\": \"17671290960\"\n" +
                        "}");
    }

}
